package com.wgy.day36常见的函数式接口.Predicate接口;

import java.util.ArrayList;
import java.util.function.Predicate;

/*
集合信息筛选
数组中有多条"姓名+性别的"信息如下:
String[] array={"迪丽热巴,女","古力娜扎,女","马尔扎哈,男","赵丽颖,女"};
请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中;
需要同时满足两个条件:1.必须是女生
                 2.姓名为4个字.
分析:1.有2个判断,所以需要使用两个Predicate接口,对条件进行判断
    2.必须两个条件同时满足,所以可以使用and方法连接两个条件

*/
public class Demo05Test {

    public static ArrayList<String> filter(String[] arr, Predicate<String> pre1, Predicate<String> pre2) {
        //定义一个集合存储过滤后的信息
        ArrayList<String> list = new ArrayList<>();

        for (String s : arr) {
            boolean b = pre1.and(pre2).test(s);
            if (b) {
                list.add(s);
            }

        }
        return list;

    }

    public static void main(String[] args) {
        //定义一个存储字符串的数组
        String[] array={"迪丽热巴,女","古力娜扎,女","马尔扎哈,男","赵丽颖,女"};
        //调用filter方法.传递字符串数组和2个Lambda表达式
        ArrayList<String> list2 = filter(array,
                (String s) -> {
                    return s.split(",")[1].equals("女");
                },
                (String s) -> {
                    return s.split(",")[0].length() == 4;
                }
        );
        for (String s : list2) {
            System.out.println(s);
        }

    }

}
